#include "Const.h"
#include "SnakeBody.h"

/**
 * 构造方法。
 * @param bitmap    后台缓冲位图
 * @param point     位置
 * @param type      类型
 */
SnakeBody::SnakeBody(QPixmap* bitmap, QPoint* point, Type type) :
    mBitmap(bitmap),
    mBrush(nullptr),
    mNext(nullptr),
    mPosition(*point) {
    // 设置类型
    this->setType(type);

    // 画自身
    this->draw();
}

/**
 * 析构方法。
 */
SnakeBody::~SnakeBody() {
    if (mBrush != nullptr) {
        delete mBrush;
    }
}

/**
 * 画自身。
 */
void SnakeBody::draw() {
    mDrawer.begin(mBitmap);
    mDrawer.setBrush(*mBrush);
    mDrawer.drawEllipse(mPosition.x() * Const::GRID_SIZE, mPosition.y() * Const::GRID_SIZE, Const::GRID_SIZE - 1, Const::GRID_SIZE - 1);
    mDrawer.end();
}

/**
 * 将蛇身从原来的位置中抹除。
 */
void SnakeBody::erase() {
    mDrawer.begin(mBitmap);
    mDrawer.fillRect(mPosition.x() * Const::GRID_SIZE, mPosition.y() * Const::GRID_SIZE,
        Const::GRID_SIZE, Const::GRID_SIZE, Const::GAME_BOARD_COLOR);
    mDrawer.end();
}

/**
 * 获取下一个蛇身。
 * @return 下一个蛇身
 */
SnakeBody* SnakeBody::getNext() {
    return mNext;
}

/**
 * 获取位置。
 * @return 位置
 */
QPoint* SnakeBody::getPosition() {
    return &mPosition;
}

/**
 * 设置下一个蛇身。
 * @param next  下一个蛇身
 */
void SnakeBody::setNext(SnakeBody* next) {
    mNext = next;
}

/**
 * 设置位置。
 * @param position  位置
 */
void SnakeBody::setPosition(QPoint* position) {
    mPosition = *position;
}

/**
 * 设置蛇身的类型。
 * @param type  蛇身类型
 */
void SnakeBody::setType(Type type) {
    if (mBrush != nullptr) {
        delete mBrush;
    }
    if (type == SNAKE) {
        mBrush = new QBrush(Const::SNAKE_COLOR);
    } else {
        mBrush = new QBrush(Const::APPLE_COLOR);
    }
}
